\section{Développement d'une application iPhone}
\subsection{Développer sur iPhone}
Pour développer sur iPhone, il est nécessaire de suivre le protocole recommandé par Apple, à savoir son programme de développeur \cite{appledev}. 
On peut ainsi développer gratuitement sa propre application à l'aide  de la combinaison SDK \footnote{Software Development Kit} et XCode, c'est-à-dire la combinaison d'une
bibliothèques de classes développée par Apple et son IDE \footnote{Integrated Development Environment} associé pour développer.
Apple fournit également un iPhone simulator (et non pas emulator car il simule seulement l'environnement de l'iPhone OS) pour pouvoir tester son application
sans passer par un iPhone.
La documentation fournie est très riche, pour peu que l'on s'inscrive en tant que développeur.
L'objective-C et Cocoa (le langage de programmation et le framework) y sont très bien expliqués, et une grande quantité d'exemples d'applications sont fournies, 
pour mettre en exergue une fonctionnalité particulière de l'API.
\subsection{Cocoa et l'Objective-C}
\subsection{Description de Cocoa}
Cocoa est une bibliothèque de classes fournie par Apple pour construire des applications (autant pour Mac que pour iPhone). 
La version iPhone (baptisée Cocoa Touch) comprend plusieurs frameworks :
\begin{itemize}
 \item Foundation : couche basique de classes utilisées par toutes les applications.
 \item UIKit : classes utilisées pour la gestion de l'interface utilisateur (gestion des événements, contrôleurs pour l'interface tactile...)
\end{itemize}
Cocoa est basé sur l'architecture MVC : Modèle Vue Contrôleur.

\begin{figure}[H]
\centering
 \includegraphics[width=10cm]{body/images/model_view_controller.jpg}
\caption{Architecture MVC}
\end{figure}
Cocoa Touch permet de gérer entre autres les outils suivants :
\begin{itemize}
 \item \'Evénements et contrôles multi-touch
 \item Accéléromètre
 \item Hiérarchie des vues
 \item Géolocalisation
 \item Appareil photo
\end{itemize}

\subsubsection{UIKit}
%A développer
\subsubsection{Foundation}
%A développer
\subsection{Introduction à l'Objective-C}
L'objective-C est un langage de programmation orienté objet issu de ANSI C. Il possède une syntaxe simple,
claire et est de ce fait facile à prendre en main (même si déroutant parfois).
C'est un langage à typage faible, dans lequel le type des variables n'est pas fixé. Et on ne manipule qu'un nombre limité de types d'objet.
On peut ainsi manipuler plus simplement les données que l'on a à disposition. Ce qui ne veut pas dire qu'on ne peut pas programmer quelque chose de très complexe.

\subsubsection*{Exemples de code}
L'appel d'une méthode se fait par passage de message sur un objet. En voici un exemple :
\begin{center}
 \texttt{[objet méthode: argument]}
\end{center}
Il est même possible de chaîner les messages à la suite.

La syntaxe des méthodes a été pensée pour qu'elle ressemble plus au langage humain.
\subsection{XCode et le SDK}
Le SDK fournit les outils de développement et XCode est l'environnement pour utiliser ces outils.
\subsection{Présentation de XCode}
XCode est l'environnement de développement fourni par Apple. Il est accompagné de tous les outils nécessaires pour développer et tester son application, à savoir :
\begin{itemize}
 \item un simulateur iPhone
 \item Instruments, pour mesurer les performances de l'application
 \item Interface Builder, pour construire graphiquement son interface.
\end{itemize}
Une fois la licence développeur souscrite chez Apple, XCode permet de transférer son application sur iPhone pour effectuer les tests.

\subsection{Présentation du SDK}
Le SDK fournit tous les outils pour permettre de développer son application sur iPhone. Outre Cocoa Touch, il fournit également d'autres outils, notamment multimedia 
(comme OpenGL ES pour les jeux) ou encore réseau.
\subsection{Le simulateur iPhone}
Le simulateur iPhone permet de tester rapidement son application sans passer par un iPhone (et tant que la licence développeur n'est pas souscrite). 
On repère ainsi rapidement les problèmes que rencontrent l'application et corriger les principaux bugs. 
On peut simuler à la fois un iPhone ou un iPad, mais également des iOS différents.
\subsection{Interface Builder}
Il est possible de construire l'interface directement avec l'Interface Builder fourni par Apple. 
C'est l'application utilisée pour assembler les éléments visuels (comme des fenêtres, ou menus) de l'application. Le positionnement des éléments se fait par \textit{drag-and-drop}
directement dans la fenêtre de Interface Builder. Ces données d'interface sont contenues dans des fichiers de type NIB. Les couleurs des barres de navigations,
par exemple peuvent être directement paramétrées ici.

\subsection{Application Evian Masters}
L'application permet l'affichage de la liste des joueuses (et une recherche dans cette liste) et de leur description associée, 
ainsi que l'affichage de la liste des actualités,  d'une galerie photos, et du leaderboard (scores en temps réel). Elle n'utilise donc que des composants simples.
\subsubsection{Le framework Three20}
L'application est basée sur le framework open-source Three20 \cite{three20} utilisé pour l'application Facebook de l'iPhone, sous licence Apache 2.0. Il est particulièrement adapté 
lorsque l'application récupère du contenu en ligne, comme des galeries photos par exemple.
Un certain nombre de contrôleurs et de vues est déjà implémenté comme la gestion de galeries photos, la barre de tabulation, la visualisation
de tables (utilisés pour l'application Evian).

La navigation entre les tables et leur contenu (typiquement les joueuses et leur fiche associée) se fait ici par adressage URL. 
Chaque fiche est associée à une URL que l'on spécifie ainsi à la table pour faire correspondre la joueuse associée. On appelle une URL 
qui va trouver le bon code à lancer. La barre de tabulation fonctionne sur le même principe. Cet outil est très puissant, et permet de
lier rapidement les composants entre eux. 

Three20 implémente également un composant de galerie d'images similaire à celui d'Apple, à ceci près qu'il est beaucoup plus flexible au niveau des sources. 
On peut ainsi aisément aller chercher une galerie Flickr en ligne par exemple.

Un nombre important de modèles de cellules est déjà présent, avec ou sans image, texte court ou long...

D'autres fonctionnalités existent encore :
\begin{itemize}
 \item Moteur de recherche dans un tableau
 \item Composition de messages (champs de texte configurable, autocompletion)
 \item Simulateur du springboard
 \item Tabulation en haut de l'écran
 \item Indicateurs d'activité
\end{itemize}
\subsubsection{Structure de l'application}
On est dans une architecture MVC, et on implémente ainsi différents contrôleurs pour chaque composant :
\begin{itemize}
 \item Menu (affichage des tables News et Photosets)
 \item Contenu (affichage du contenu des tables News et Players)
 \item Barre de tabulation (4 items)
 \item Galerie d'images (thumbnails), défilement
 \item Moteur de recherche des joueuses
\end{itemize}
\subsubsection{Rendu de l'interface}
Etant donné qu'une autre librairie a été utilisée pour développer l'application, l'Interface Builder a été mis de côté
au profit d'une programmation directe de l'interface. Tout les éléments sont placés dans les méthodes \texttt{loadView()} et/ou \texttt{viewDidLoad()} (Cf. \ref{appxA}) des contrôleurs.
Il est possible également de surclasser la feuille de style par défaut utilisée avec Three20 (un peu comme un fichier CSS) pour définir les couleurs de certaines polices ou même 
leur style (comme celles dans les cellules des tableaux par exemple).
\subsubsection{Traduction de l'application}
Pour traduire une application, il faut fournir des fichiers de traduction correspondant aux langues dans lesquelles on souhaite voir apparaître l'application. 
Il y a un fichier par traduction. A l'intérieur  des fichiers, on place les traductions au format :
\begin{center}
``Clé'' = ``traduction'' 
\end{center}
On place ensuite dans le code la clé qui correspond à la traduction que l'on souhaite voir. On peut aussi créer des images localisées, 
qui apparaîtront selon la langue sélectionnée.

\subsubsection{Webservices et TouchXML}
L'application accède au contenu en ligne par l'intermédiaire de webservices, qui délivrent les informations au format XML. Pour retranscrire ces données de façon lisible 
par l'application, un parser XML doit être implémenté. Ce dernier permet de récupérer les informations contenues dans les fichiers XML pour qu'elles deviennent exploitables
dans le programme. Il existe plusieurs parsers sur iPhone, et il est possible de le développer soit même sans trop de difficulté. Un critère essentiel dans le choix du parser
a été la gestion du XPath, qui permet de récupérer très facilement les informations contenues dans un fichier XML. C'est principalement pour cela qu'a été retenu TouchXML,
à la fois fiable, performant, et prenant en compte le XPath.
\subsubsection{Images de l'application}
\begin{figure}[H]
\centering
 \includegraphics[width=4cm]{body/images/Capture_app/Image5.png}
 \includegraphics[width=4cm]{body/images/Capture_app/Image6.png}
 \includegraphics[width=4cm]{body/images/Capture_app/Image7.png}
 \includegraphics[width=4cm]{body/images/Capture_app/Image8.png}
 \includegraphics[width=4cm]{body/images/Capture_app/Image9.png}
 \includegraphics[width=4cm]{body/images/Capture_app/Image10.png}
 \includegraphics[width=4cm]{body/images/Capture_app/Image11.png}
 \includegraphics[width=4cm]{body/images/Capture_app/Image13.png}
\end{figure}

\subsection{Validation sur l'AppStore}
Apple est très sensible sur la validation de ses applications sur l'App Store. Toute application qui concurrence une fonctionnalité native fournie pas Apple. 
Certes ce n'est pas le cas ici puisqu'il s'agit d'une application de promotion d'une compétition sportive. 
Toutefois, on ne peut pas toucher à tous les aspects de l'application. En développant, on se rend compte que certains 
composants sont très difficiles à modifier, comme la couleur des items de la barre de tabulation (par défaut, bleu aqua).
Même s'il est possible de le faire, certaines méthodes employées pour y parvenir ne sont pas validées par Apple, car on 
surcharge des méthodes privées...

Apple propose également une guideline pour programmer ``correctement'' son application sur \url{http://developer.apple.com/iphone/news/appstoretips/} 
et éviter ainsi de se faire refuser directement son application (indiquer si la connexion internet est disponible, spécifier pour quel matériel est compatible l'application...).
Aujourd'hui 95 \% des applications sur l'App Store sont validées en moins de 7 jours (15 000 applications sont soumises par semaine). Les 5 \% restant 
ne sont pas validées car elles ne sont généralement pas stables, ne sont pas conformes à la présentation qui en est faite ou bien utilisent des API privées.
Les API privées sont non documentées par Apple, et on ne doit donc en théorie pas les utiliser. Elles peuvent être appelées par des framework comme Three20,
et empêchent ainsi la validation sur l'App Store. Il est presque impossible d'appeler par erreur une API privée, car elles ne sont même pas accessibles par autocompletion sur 
XCode.

Enfin, des conseils marketing sont également donnés pour mettre en valeur son application : bien choisir les mots clés associés, la description, fournir des images de qualité 
(qui respectent les standards imposés par Apple...). Une documentation de 150 pages est fournie pour décrire le process de soumission d'application sur l'App Store. 
Pour ce faire, on utilise les outils founis par iTunes Connect, qui permet de gérer son application sur l'AppStore.
